<?php 
/**
 * This file is part of DomAr.
 * 
 * DomAr is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * DomAr is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with DomAr.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * @link http://inditel.ee/
 * @copyright 2007-2009 Inditel Meedia OÜ
 * @author Oliver Leisalu <oliver@inditel.ee>
 */

/**
* @package DomAr
* @subpackage Parser
*/
abstract class DomArClassParserRecordProperty extends DomArClassParserProperty {
	
	/**
	* @var String Access [private|protected|public]
	*/
	protected $access;
	
	/**
	* @var String Class name of the DomArProperty class that will be handling property events like set, init, load etc.
	*/
	protected $handlerClassName;
	
	/**
	* @var String Code how handler will be created. For example "new DomArProperty_Text('".$this->name."','".$this->type."')"" creates "@orm text" handler
	*/
	protected $createHandlerCode;

	final public function __construct( $className, $access, $name, $code, array &$orm ) {
		parent::__construct( $className, $name, $code );
		if( $access != 'private' && $access != 'protected' && $access != 'public' )
			throw new RuntimeException('Unknown access <strong>"'.$access.'"</strong> type for property <strong>'.$name.'</strong> in class <strong>'.$className.'</strong>');
		$this->access = $access;
		$this->setOrm( $orm );
	}
	
	final public function prepare( DomArClassParser $class ) {
		$this->updateHandlerClassName( $class );
		$this->updateCreateHandlerCode( $class );
	}
	
	/**
	* This method will be called when creating RecordProperty.
	* @param Array @orm Parsed orm definition
	*/
	abstract protected function setOrm( array &$orm );
	
	/**
	* This method must update property $handlerClassName value.
	*/
	abstract protected function updateHandlerClassName( DomArClassParser $class );
	
	/**
	* This method must update property $createHandlerCode value.
	* It is called after updateHandlerClassName
	*/
	abstract protected function updateCreateHandlerCode( DomArClassParser $class );

}
?>